package psn.kiko.mapper.business.system;

import org.apache.ibatis.annotations.Mapper;
import psn.kiko.annotation.sql.CommonFiledAutoSet;
import psn.kiko.annotation.sql.NeedCommonFiledAutoSet;
import psn.kiko.enumeration.DataBaseOperationType;
import psn.kiko.pojo.dto.InterfaceDTO;
import psn.kiko.pojo.entity.system.InterfaceEntity;
import psn.kiko.pojo.vo.InterfacePageVO;
import psn.kiko.pojo.vo.PureInterfaceVO;

import java.util.List;
import java.util.Set;

/**
 * 接口管理DAO
 */
@Mapper
public interface InterfaceMapper{
	/**
	 * 批量插入接口，通过AOP自动设置解析时间、解析者id、更新时间、更新者id
	 */
	@CommonFiledAutoSet(DataBaseOperationType.INSERT_BATCH)
	Integer insertList(@NeedCommonFiledAutoSet List<InterfaceEntity> list);
	
	/**
	 * 查询接口列表
	 */
	List<InterfacePageVO> selectList(InterfaceDTO interfaceDTO);
	
	/**
	 * 列举接口所有分组
	 */
	Set<String> listApiGroups();
	
	/**
	 * 列举接口所有类名
	 */
	Set<String> listApiClassNames();
	
	/**
	 * 列出接口所有请求方式
	 */
	Set<String> lisApiRequestMethods();
	
	
	/**
	 * 根据id批量删除接口
	 */
	Integer deleteByIds(List<Integer> ids);
	
	/**
	 * 根据id批量更新接口状态
	 */
	Integer updateStatusByIds(List<Integer> apiIds,short enableOrDisable);
	
	/**
	 * 根据id更新接口,通过AOP自动设置更新时间、更新者id
	 */
	@CommonFiledAutoSet(DataBaseOperationType.UPDATE)
	Integer updateById(@NeedCommonFiledAutoSet InterfaceEntity interfaceEntity);
	
	/**
	 * 根据请求路径和方式查询接口
	 */
	InterfaceEntity selectByPathAndMethod(String requestPath,String requestMethod);
	
	/**
	 * 获取更简洁的接口信息
	 */
	PureInterfaceVO selectById(Integer id);
	
	List<PureInterfaceVO> selectDeprecatedInterfaces(List<Integer> ids);
}
